package com.chenyun.common.utils;

import cn.hutool.core.lang.Singleton;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.spring.SpringUtil;
import com.github.yitter.contract.IdGeneratorOptions;
import com.github.yitter.idgen.YitIdHelper;

import java.io.Serializable;

/**
 * YidUtil：
 * Description:
 *
 * @author: Lonni
 * @date: 2024/4/19 0019 16:36
 */
public class YidUtil implements Serializable {
    private YidUtil(){}
    public static YidUtil me=new YidUtil();

    /**
     * 初始化id
     * 只执行一起
     */
    public void init(){
        if (YitIdHelper.getIdGenInstance() != null) {
            return;
        }
        String workId=SpringUtil.getProperty("chenyun.work-id");
        String byteId=SpringUtil.getProperty("chenyun.byte-id");
        IdGeneratorOptions options = new IdGeneratorOptions();
        if (StrUtil.isNotBlank(workId)){
            // 默认值6，限定 WorkerId 最大值为2^6-1，即默认最多支持64个节点。
            options.WorkerId = Short.valueOf(workId);
        }
        if (StrUtil.isNotBlank(byteId)){
            // 默认值6，限制每毫秒生成的ID个数。
            //若生成速度超过5万个/秒，低于50W，推荐修改：SeqBitLength=10
            //生成ID速度超过50W/s，接近500W，推荐修改：SeqBitLength=12
            options.SeqBitLength = (byte) Integer.parseInt(byteId);
        }
        //1雪花漂移算法//2常规雪花算法
        options.Method = 1;
        YitIdHelper.setIdGenerator(options);
    }


    /**
     * 获取id
     * @return
     */
    public  long nextId() {
        return YitIdHelper.nextId();
    }
}



